﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Exchange;
using ParameterDirection = Exchange.ParameterDirection;

namespace Nau.Parametrizer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        //Створення об"экту класу, що включає в себе параметри
        private Parameters _parameters = new Parameters();

        private void Form1_Load(object sender, EventArgs e)
        {
            //Ініціалізація елементів управління
            InitControls();
        }

        private void InitControls()
        {

            Serializer serializer = new Serializer();
            //Десеріалізація об"єкту
            _parameters = serializer.DeSerializeObject(Application.StartupPath.Replace("\\Nau.Parametrizer\\bin\\Debug","")+"\\Parameters.prm");
            //Перевірка параметрів на пустоту
            if(_parameters != null)
                {
                    //Привязка даних з ParameterList до списку.
                     listBoxNames.DataSource = _parameters.ParameterList;
                     listBoxNames.DisplayMember = "Name";
                     listBoxNames.ValueMember = "Id";
                }
            //Привязка даних з Types до відповідного comboBox.
            comboBoxType.DataSource = _parameters.Types;


        }
        //Ініціалізація елементів управління для вибраного параметру
        void InitSelectedItemControls(Parameter item)
        {
            textBoxName.Text = item.Name;
            textBoxId.Text = item.Id;
            maskedTextBoxPriority.Text = item.Priority.ToString();
            comboBoxType.Text = item.Type;
            textBoxTime.Text = item.LifeTime.ToString();
            textBoxValueString.Text = item.ValueString;
        }
       
        private void buttonSave_Click(object sender, EventArgs e)
        {
            //Виклик збереження параметру
            SaveParameter();
            //Серіалізатор
            Serializer serializer = new Serializer();
            //Серіалізація списку об"єкту параметрів
            serializer.SerializeObject(Application.StartupPath.Replace("\\Nau.Parametrizer\\bin\\Debug", "") + "\\Parameters.prm", _parameters);
            //Повторна ініціалізація елементів управління, оскільки ідентифікатор міг бути змінений
            InitControls();
        }
        protected void SaveParameter()
        {
            //Запис в об"єкт параметру даних з елементів управління
            Parameter item = new Parameter(String.IsNullOrEmpty(textBoxId.Text) ? Guid.NewGuid().ToString() : textBoxId.Text, 
                                          textBoxName.Text,
                                          Exchange.ParameterDirection.Input,
                                          comboBoxType.Text,
                                          Double.Parse(maskedTextBoxPriority.Text),
                                          Int32.Parse(textBoxTime.Text),
                                          textBoxValueString.Text);
            //Якщо елементу з таким ідентифікатором не існує, то ми його добавляємо в список
            if(_parameters.ParameterList.Select(t => t.Id == item.Id).Count()==0)
            {
                _parameters.Add(item);
            }
            //В інакшому випадку відбувається видалення і повторний запис.
            else
            {
                _parameters.ParameterList = _parameters.Remote(item);
                _parameters.Add(item);

            }
        }

        private void listBoxNames_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Якщо є вибраний параметр, то ініціалізуємо елементи управління для цього параметру
            if (listBoxNames.SelectedItem != null)
                InitSelectedItemControls((Parameter)listBoxNames.SelectedItem);
        }
    }
}
